package com.xlhj.boot.service;

import com.xlhj.boot.dto.RequestDto;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;

import java.io.IOException;

/**
 * @author: liucaijing
 * @description: HBaseService
 * @date: 2021/6/7 15:17
 */
public interface HBaseService {

    /**
     * 判断表是否存在
     * @param tableName 表名
     * @return
     */
    boolean isTableExist(String tableName) throws Exception;

    /**
     * 新建表
     * @param tableName 表名
     * @param columnFamily 列族
     */
    void createTable(String tableName, String... columnFamily) throws Exception;

    /**
     * 删除表
     * @param tableName 表名
     */
    void deleteTable(String tableName) throws Exception;

    /**
     * 添加数据
     * @param request
     * @throws Exception
     */
    void addData(RequestDto request) throws Exception;

    /**
     * 删除数据
     * @param tableName 表名
     * @param rowKey
     */
    void deleteData(String tableName, String rowKey) throws Exception;

    /**
     * 删除多条数据
     * @param tableName 表名
     * @param rowKeys
     */
    void deleteMultiData(String tableName, String... rowKeys) throws Exception;

    /**
     * 获取一条数据
     * @param tableName 表名
     * @param rowKey
     */
    Result getOneData(String tableName, String rowKey) throws Exception;

    /**
     * 获取多条数据
     * @param tableName 表名
     * @param startRowKey 开始rowkey
     * @param endRowKey 结束rowkey
     */
    ResultScanner getMultiData(String tableName, String startRowKey, String endRowKey) throws Exception;

    /**
     * 获取所有数据
     * @param tableName
     */
    ResultScanner getAllData(String tableName) throws Exception;

    /**
     * 获取单条数据指定列族:列
     * @param tableName
     * @param rowKey
     * @param columnFamily
     * @param qualifier
     * @return
     */
    Result getOneRowByQualifier(String tableName, String rowKey, String columnFamily, String qualifier) throws Exception;

    /**
     * 根据rowKey前缀查询
     * @param tableName 表名
     * @param prefix 前缀
     * @return
     * @throws Exception
     */
    ResultScanner getDataByPrefix(String tableName, String prefix) throws Exception;

    /**
     * 根据row过滤器查询
     * @param tableName 表名
     * @param rowStr row过滤符
     * @return
     * @throws Exception
     */
    ResultScanner getDataByRow(String tableName, String rowStr) throws Exception;

    /**
     * 获取列名
     * @param tableName
     * @return
     * @throws IOException
     */
    Result getRowQualifier(String tableName) throws Exception;

    /**
     * 根据rowkey和rowkey前缀分页查询
     * @param tableName 表名
     * @param rowKey
     * @param rowStr 前缀
     * @param pageSize 每页条数
     * @return
     */
    ResultScanner getPageDataByRow(String tableName, String rowKey, String rowStr, int pageSize) throws Exception;

    /**
     * 根据行权限和列权限分页查询
     * @param tableName
     * @param rowKey
     * @param rowStr
     * @param qualifierStr
     * @param pageSize
     * @return
     */
    ResultScanner getPageDataByRowAndQualifier(String tableName, String rowKey, String rowStr, String qualifierStr, int pageSize) throws Exception;
}
